package cn.tedu._04mybatis.mapper;

import cn.tedu._04mybatis.pojo.entity.Weibo;
import cn.tedu._04mybatis.pojo.vo.*;
import org.apache.ibatis.annotations.*;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

@Mapper
public interface WeiboMapper {
    /**
     * 1.微博表中插入1条数据;
     * 2.根据微博ID删除指定微博;
     */
//    @Insert("INSERT INTO weibo(content,created,user_id) VALUES (#{content},#{created},#{userId})")
    int insertWeibo(Weibo weibo);
//    @Delete("DELETE FROM weibo WHERE id=#{id}")
    int deleteWeiboById(Long id);

    /**
     * 3.根据微博id修改指定微博信息
     */
//    @Update("UPDATE weibo SET content=#{content},created=#{created},user_id=#{userId} WHERE id=#{id}")
    int updateWeiboById(Weibo weibo);
    /**
     * 4.单条数据全字段查询:查询指定微博的所有字段的数据
     */
//    @Select("SELECT id,content,created,user_id userId FROM weibo WHERE id=#{id}")
    Weibo selectWeiboById(Long id);
    /**
     * 5.多条数据全字段查询:查询指定用户发的所有微博信息
     */
//    @Select("SELECT id,content,created,user_id userId FROM weibo WHERE user_id=#{uid}")
    List<Weibo> selectWeiboByUserId(Long uid);

    /**
     * 6.单条数据部分字段查询:查询指定微博的微博内容和发布时间
     */
//    @Select("SELECT content,created FROM weibo WHERE id=#{id}")
    WeiboVO1 selectWeiboVO1ById(Long id);

    /**
     * 7.多条数据部分字段查询
     * 查询指定用户[用户ID]发的所有微博,要求显示:用户昵称,微博内容,发布时间;
     */
//    @Select("SELECT u.nickname,w.content,w.created FROM user u JOIN weibo w ON u.id=w.user_id WHERE u.id=#{uid}")
    List<WeiboVO2> selectWeiboVO2ById(Long uid);

    /**
     * 动态修改指定微博的信息;
     */
    int dynamicUpdate(Weibo weibo);

    /**
     * 9。动态删除：集合形式删除微博
     */
    int dynamicDelete(ArrayList<Long> ids);


    /**
     *10.数组形式删除微博
     */
    int dynamicDelete2(Long[] ids);

    /**
     * 11.统计数量:统计微博表中的数据条数
     */

    int selectCount();
    /**
     * 12.ResultMap单表: 根据微博ID查询该条微博的 id、content、user_id 字段的数据;
     *    SELECT id,content,user_id FROM weibo WHERE id=#{id}
     */
    ResultMapVO1 selectMap1(Long id);

    /**
     * 13.ResultMap2多表
     */

    ResultMapVO2 selectMap2(Long uid);

    /**
     * 15.多表练习
     */
    ResultMapVO4 selectMap4(Long wid);
}
